package com.xiandou.server.controller;

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.xiandou.server.config.DefaultConfig;
import com.xiandou.server.config.DefaultConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.Set;

/**
 * @author rocpeng
 */
@RequestMapping("/demo")
@RestController
public class ApolloController {

    /**
     * 获取 apollo 配置方法一
     * 直接通过 apollo 提供的ConfigService类获取 Config对象
     *
     * @return
     */
    @GetMapping("/getConfig1")
    public String getConfig1() {
        Config config = ConfigService.getAppConfig();
        Config config1 = ConfigService.getConfig("test-namespace");


        String property1 = config.getProperty("key", "default");
        config.getDoubleProperty("key",2020d);
        config.getDateProperty("key",new Date());

        // 获取所有的配置的 key
        Set<String> keys = config.getPropertyNames();



        String property = config.getProperty("name", "default");
        return property;
    }

    /**
     * 获取 apollo 配置方法二
     * 通过自定义 Config 类统一获取
     * config 类加上@Configuration @EnableApolloConfig
     * 在类中的属性中 通过@value("${key}") 注解获取配置值
     *
     * @return
     */
    @Autowired
    private DefaultConfig defaultConfig;

    @GetMapping("/getConfig2")
    public String getConfig2() {
        return defaultConfig.getName();
    }

    /**
     * 获取 apollo 配置方法三
     * 通过@bean 方法注入
     *
     * @return
     */
    @Autowired
    private DefaultConfigBean defaultConfigBean;

    @GetMapping("/getConfig3")
    public String getConfig3() {
        return defaultConfigBean.javaConfigBean().getName();
    }


}
